//#include <iostream>
//using namespace std;
//
//const int N = 1e6 + 10;
//
//int n, heap[N];
//
//void up(int child)
//{
//	int parent = child / 2;
//	
//	while (parent >= 1)
//	{
//		if (heap[child] < heap[parent])
//		{
//			swap(heap[child], heap[parent]);
//		}
//		
//		child = parent;
//		parent = child / 2;
//	}
//}
//
//void down(int parent)
//{
//	int child = parent * 2;
//	
//	while (child <= n)
//	{
//		if (child + 1 <= n && heap[child + 1] < heap[child]) child ++;
//		if (heap[child] >= heap[parent]) return;
//		swap(heap[parent], heap[child]);
//		
//		parent = child;
//		child = parent * 2;
//	}
//}
//
//void push(int x)
//{
//	n++;
//	heap[n] = x;
//	
//	up(n);
//}
//
//void pop()
//{
//	swap(heap[1], heap[n]);
//	n--;
//	
//	down(1);
//}
//
//int main()
//{
//	int n1; cin >> n1;
//	while (n1--)
//	{
//		int op; cin >> op;
//		
//		if (op == 1)
//		{
//			int x; cin >> x;
//			push(x);
//		}
//		else if (op == 2)
//		{
//			cout << heap[1] << endl;
//		}
//		else
//		{
//			pop();
//		}
//	}
//	
//	return 0;
//}



//#include <iostream>
//#include <queue>
//using namespace std;
//
//int n, m, k;
//
//int main()
//{
//	cin >> n >> m >> k;
//	
//	priority_queue<int> heap;
//	
//	for (int i = 0; i < n; i++)
//	{
//		int x; cin >> x;
//		heap.push(x);
//		
//		if (heap.size() > k) heap.pop();
//	}
//	
//	while (m--)
//	{
//		int op; cin >> op;
//		
//		if (op == 1)
//		{
//			int x; cin >> x;
//			heap.push(x);
//			
//			if (heap.size() > k) heap.pop();
//		}
//		else
//		{
//			if (heap.size() == k) cout << heap.top() << endl;
//			else cout << -1 << endl;
//		}
//	}
//	
//	return 0;
// } 



//#include <iostream>
//#include <queue>
//using namespace std;
//
//priority_queue<int> heap;
//
//int main()
//{
//	int n, k; cin >> n >> k;
//	long long sum = 0;
//	
//	for (int i = 0; i < n; i++)
//	{
//		int x; cin >> x;
//		sum += x;
//		if (x % 2 == 0) heap.push(x);
//	}
//
//	while (heap.size() && k--)
//	{
//		int t = heap.top() / 2; heap.pop();
//		sum -= t;
//		
//		if (t % 2 == 0) heap.push(t);
//	}
//	
//	cout << sum << endl;
//	
//	return 0;
// } 



#include <iostream>
#include <queue>
using namespace std;

const int N = 1e4 + 10;

class node{
	public:
		int f;
		int id;
		int x;
		
		bool operator<(const node& x) const
		{
			return f > x.f;
		}
};

priority_queue<node> heap;
int n, m, a[N], b[N], c[N];

int calc(int x, int id)
{
	return a[id] * x * x + b[id] * x + c[id];	
}

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i] >> b[i] >> c[i];
	}
	
	for (int i = 1; i <= n; i++)
	{
		heap.push({calc(1, i), i, 1});
	}
	
	while (m--)
	{
		node t = heap.top(); heap.pop();
		int f = t.f, id = t.id, x = t.x;
		cout << f << " ";
		heap.push({calc(x + 1, id), id, x + 1});
	}
	
	return 0;
}
